package bomberman.modelo.armas;

import java.util.HashMap;

import org.jdom2.Element;

import bomberman.modelo.mapa.Casillero;
import bomberman.modelo.mapa.Direccion;
import bomberman.modelo.observadores.Observadores;

public class ToleTole extends BombaTemporizada {
  private static final int    DESTRUCCION_TOLETOLE_STD = Integer.MAX_VALUE;
  private static final int    RADIO_TOLETOLE_STD       = 6;
  private static final int    RETARDO_TOLETOLE_STD     = 5;
  private static final double BASE_PORCENTAJE          = 100;
  
  public ToleTole(Casillero unaUbicacion, int porcentajeRetardo) {
    super(
      ToleTole.DESTRUCCION_TOLETOLE_STD,
      ToleTole.RADIO_TOLETOLE_STD,
      unaUbicacion,
      (ToleTole.RETARDO_TOLETOLE_STD * (1 + (porcentajeRetardo / ToleTole.BASE_PORCENTAJE))));
    Observadores.notificar(this);
  }
  
  @Override
  protected HashMap<Direccion, OndaExpansiva> producirOndas() {
    HashMap<Direccion, OndaExpansiva> ondasExpansivas =
      new HashMap<Direccion, OndaExpansiva>();
    final int unaDestruccion = this.getDestruccion();
    final int unRadio = this.getRadio();
    final Direccion[] direcciones =
      {Direccion.NOROESTE, Direccion.NORTE, Direccion.NORESTE, Direccion.OESTE,
        Direccion.ESTE, Direccion.SUROESTE, Direccion.SUR, Direccion.SURESTE};
    final int cantidadDirecciones = direcciones.length;
    for (int contador = 0; contador < cantidadDirecciones; contador++) {
      ondasExpansivas.put(direcciones[contador], new OndaExpansivaToleTole(
        unaDestruccion, unRadio, direcciones[contador]));
    }
    return ondasExpansivas;
  }
  
  @Override
  protected void desaparecer() {
    this.ubicacion.setContenidoBajo(null);
    Observadores.notificar(this);
  }

@Override
public Element serializar() {
	// TODO Auto-generated method stub
	Element eToleTole = new Element("ToleTole");
	return(super.serializar(eToleTole));
	
}

public static ToleTole recuperar(Element eToleTole, Casillero casillero) {
	double retardoRecuperado = Double.parseDouble(eToleTole.getAttributeValue("Retardo"));
	ToleTole nuevaTole = new ToleTole(casillero,0);
	nuevaTole.setRetardo(retardoRecuperado);
	casillero.setContenidoBajo(nuevaTole);
	return nuevaTole;
}
}
